package VisaoControleAcademico;

import java.awt.Dimension;
import java.awt.Toolkit;
import java.sql.SQLException;
import java.text.ParseException;
import java.util.List;

import javax.swing.JButton;
import javax.swing.JFormattedTextField;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.ListSelectionModel;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.table.DefaultTableModel;
import javax.swing.text.MaskFormatter;

import ControleDiversas.AlunoControlador;
import ControleDiversas.AlunoDao;
import ModeloAcademico.Alunos;


public class TelaCadastroAluno extends JFrame implements ViewTelaAluno{
	/**
	 * --------------------Cadastro de aluno--------------------------
	 */
	private AlunoControlador controle;
	
	
	private static final long serialVersionUID = 1L;
	private JLabel lblnome, lblendereco, lblemail,lblDtataNascimento,lblid,lblrg,lblcpf;
	private JTextField txid, txnome,txendereco,txemail,txrg;
	private JTable  tabela;
	private JFormattedTextField txDatanascimento,txcpf;
	private JButton  novo,  salvar,  editar, excluir, sair, pesquisar;
	private ListSelectionModel lsAluno ;
    private JTable tabelaDeAlunos;
	DefaultTableModel modeloTabela;
	private JScrollPane  scoller;
	
	
		
	public JTextField getTxid() {
		return txid;
	}



	public void setTxid(JTextField txid) {
		this.txid = txid;
	}



	public JTextField getTxnome() {
		return txnome;
	}



	public void setTxnome(JTextField txnome) {
		this.txnome = txnome;
	}



	public JTextField getTxendereco() {
		return txendereco;
	}



	public void setTxendereco(JTextField txendereco) {
		this.txendereco = txendereco;
	}



	public JTextField getTxemail() {
		return txemail;
	}



	public void setTxemail(JTextField txemail) {
		this.txemail = txemail;
	}



	public JTextField getTxrg() {
		return txrg;
	}



	public void setTxrg(JTextField txrg) {
		this.txrg = txrg;
	}



	public JFormattedTextField getTxDatanascimento() {
		return txDatanascimento;
	}



	public void setTxDatanascimento(JFormattedTextField txDatanascimento) {
		this.txDatanascimento = txDatanascimento;
	}



	public JFormattedTextField getTxcpf() {
		return txcpf;
	}



	public void setTxcpf(JFormattedTextField txcpf) {
		this.txcpf = txcpf;
	}



	public TelaCadastroAluno(AlunoControlador controle){
		this.controle = controle;
		setLayout(null);
		inicializaCampos();
		adiconaComponentesNaTela();
		editaPosicaoDosComponentes();
		adicionaAcao();
		setTitle("Aluno");
		setSize(550,500);
		setUndecorated(true);
		centralizarComponente();
		tabelaDeAlunos.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
		lsAluno = tabelaDeAlunos.getSelectionModel();
		lsAluno.addListSelectionListener(new ListSelectionListener() {
			
			@Override
			public void valueChanged(ListSelectionEvent e) {
			if(! e.getValueIsAdjusting()){
				linhaSelecionada(tabela);
			}
				
			}
		});
		desabilitaCampos();
	}
	public void centralizarComponente() {  
        Dimension ds = Toolkit.getDefaultToolkit().getScreenSize();  
        Dimension dw = getSize();  
        setLocation((ds.width - dw.width) / 3, (ds.height - dw.height) / 2);  
    } 
	
	

	private void adiconaComponentesNaTela() {
		add(lblnome);
		add(lblendereco);
		add(lblemail);
		add(lblDtataNascimento);
		add(lblcpf);
		add(lblrg);
		add(txnome);
		add(txendereco);
		add(txDatanascimento);
		add(txemail);
		add(txDatanascimento);
		add(txcpf);
		add(txrg);
		add(novo);
		add(salvar);
		add(editar);
		add(excluir);
		add(sair);
		add(txid);
		add(pesquisar);
		add(lblid);
	    add(scoller);
		
	}

	private void editaPosicaoDosComponentes() {
		lblid                      .setBounds(20, 40, 40, 20);
		lblnome                    .setBounds(20, 80, 60, 20);
		lblendereco                .setBounds(20, 120, 60, 20);
		lblemail                   .setBounds(20, 160, 50, 20);
		lblDtataNascimento         .setBounds(20, 200, 150, 20);
		lblcpf                     .setBounds(20, 240, 50, 20);
		lblrg                      .setBounds(20, 280, 50, 20);

		txid                       .setBounds(89, 40, 200, 20);
		txnome                     .setBounds(89, 80, 400, 20);
		txendereco                 .setBounds(89, 120, 400, 20);
		txemail                    .setBounds(89, 160, 400, 20);
		txDatanascimento           .setBounds(165, 200, 150, 20);
		txcpf		    	   	   .setBounds(89, 240, 200, 20);
		txrg			           .setBounds(89, 280, 150, 20);
		
		
		novo                       .setBounds(20, 320, 100, 30);
		salvar                     .setBounds(110, 320, 100, 30);
		editar                     .setBounds(200, 320, 100, 30);
		sair                       .setBounds(290, 320, 100, 30);
		pesquisar                  .setBounds(380, 320, 150, 30);
		scoller                    .setBounds(20, 360, 510, 100);
	}

	private void inicializaCampos() {
		
		lblnome                 = new JLabel("NOME.:");
		lblendereco             = new JLabel("ENDERECO.:");
		lblemail                = new JLabel("E-MAIL.:");
		lblDtataNascimento      = new JLabel("DATA DE NASCIMENTO.:");
		lblcpf                  = new JLabel("CPF.:");
		lblrg                   = new JLabel("RG.:");
		txnome                  = new JTextField(25);
		txendereco              = new JTextField(25);
		txemail                 = new JTextField(25);
		try {
			txDatanascimento                    = new JFormattedTextField(new MaskFormatter("##/##/####"));
		} catch (ParseException e1) {
			JOptionPane.showMessageDialog(null, "Digite apenas numeros","ERROR",JOptionPane.ERROR_MESSAGE);
			e1.printStackTrace();
		}
		try {
			txcpf                        = new JFormattedTextField(new MaskFormatter("###.###.###-##"));
		} catch (ParseException e) {
			JOptionPane.showMessageDialog(null, "Digite apenas numeros","ERROR",JOptionPane.ERROR_MESSAGE);
			e.printStackTrace();
			
		}
		txrg                        = new JTextField(12);
		
		
		
		novo                        = new JButton("NOVO");
		salvar                      = new JButton("SALVAR");
		pesquisar                   = new JButton("PESQUISAR");
		editar                      = new  JButton("EDITAR");
		excluir                     = new JButton("EXCLUIR");
		sair                        = new JButton("SAIR");
		txid                          = new JTextField(12);
		lblid                   = new JLabel("ID");
		lblDtataNascimento                  = new JLabel("DATA DA NASCIMENTO.:");
		
		
		modeloTabela                = new DefaultTableModel(null,new String[]{"id","nome","endereco"
				,"Email","Data de nascimento","CPF","RG"});
		tabelaDeAlunos            = new JTable(modeloTabela);
		
		scoller                     = new JScrollPane(tabelaDeAlunos);
	}

	
	public JTable getTabelaDeContatos() {
		return tabelaDeAlunos;
	}

	public void adicionaAcao(){
		salvar                     .addActionListener(controle);
		salvar                     .setActionCommand("salvar");
		editar                     .addActionListener(controle);
		editar                     .setActionCommand("editar");
		pesquisar                  .addActionListener(controle);
		pesquisar                  .setActionCommand("pesquisar");
		excluir                    .setActionCommand("excluir");
		excluir                    .addActionListener(controle);
		editar                     .setActionCommand("editar");
		editar                     .addActionListener(controle);
		novo                       .setActionCommand("novo");
		novo                       .addActionListener(controle);
		sair                       .setActionCommand("sair");
		sair                       .addActionListener(controle);
	}

	public DefaultTableModel getModeloTabela() {
		return modeloTabela;
	}

	@Override
	public void fecha() {
		dispose();
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}

	@Override
	public void mostra() {
		setVisible(true);
		
	}
    public void habilitaCampos(){
	 txnome           .setEditable(true);
	 txendereco       .setEditable(true);
	 txemail          .setEditable(true);
	 txDatanascimento       .setEditable(true);
	 txcpf          .setEditable(true);
	 txrg          .setEditable(true);
	}
    public void desabilitaCampos(){
   	 txnome           .setEditable(false);
   	 txendereco       .setEditable(false);
   	 txemail          .setEditable(false);
   	 txDatanascimento       .setEditable(false);
   	 txid             .setEditable(false);
   	 txcpf           .setEditable(false);
   	 txrg           .setEditable(false);
   	}

	

	public void mostraPesqisa(List<Alunos> dados) {
		while(modeloTabela.getRowCount()>0){
			modeloTabela.removeRow(0);
		}
		if(dados.size()==0){
			JOptionPane.showMessageDialog(null, "Nenhum Aluno Cadastrado");
		}else{
			String[]linha=new String[]{null,null,null,null,null,null};
			for(int i= 0; i<dados.size();i++){
				modeloTabela.addRow(linha);
				modeloTabela.setValueAt(dados.get(i).getId(), i, 0);
				modeloTabela.setValueAt(dados.get(i).getNome(), i, 1);
				modeloTabela.setValueAt(dados.get(i).getEndereco(), i, 2);
				modeloTabela.setValueAt(dados.get(i).getEmail(), i, 3);
				modeloTabela.setValueAt(dados.get(i).getDataNascimento(), i, 4);
				modeloTabela.setValueAt(dados.get(i).getCpf(), i, 5);
				modeloTabela.setValueAt(dados.get(i).getRg(), i, 6);
			}
		}
		
	}
	public void linhaSelecionada(JTable tabela){
		
		try {
			
			AlunoDao f = new AlunoDao();
			List<Alunos> oi= f.pesquisar();
			if(tabelaDeAlunos.getSelectedRow()!= -1){
			txid.setText(String.valueOf(oi.get(tabelaDeAlunos.getSelectedRow()).getId()).trim());
			txnome.setText(oi.get(tabelaDeAlunos.getSelectedRow()).getNome().trim());
			txendereco.setText(oi.get(tabelaDeAlunos.getSelectedRow()).getEndereco().trim());
			txemail.setText(oi.get(tabelaDeAlunos.getSelectedRow()).getEmail().trim());
			txDatanascimento.setText(oi.get(tabelaDeAlunos.getSelectedRow()).getDataNascimento().trim());
			txcpf.setText(oi.get(tabelaDeAlunos.getSelectedRow()).getCpf().trim());
			txrg.setText(oi.get(tabelaDeAlunos.getSelectedRow()).getRg().trim());
			}else{
				txid                .setText("");
				txnome              .setText("");
				txendereco          .setText("");
				txemail             .setText("");
				txDatanascimento    .setText("");
				txcpf               .setText("");
				txrg                .setText("");
			}
		} catch (SQLException e) {
			
			e.printStackTrace();
		}
		
	}

	
	
}
